# 11. 盛最多水的容器
# 给你 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线，垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
#
# 说明：你不能倾斜容器。
# 输入：[1,8,6,2,5,4,8,3,7]
# 输出：49

# 输入：height = [1,1]
# 输出：1

# 输入：height = [4,3,2,1,4]
# 输出：16
#
# 输入：height = [1,2,1]
# 输出：2

# 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
# 示例:
# 输入: [0,1,0,3,12]
# 输出: [1,3,12,0,0]

# https://leetcode-cn.com/problems/container-with-most-water/

# 执行用时：220 ms
# 内存消耗: 23.4 MB
# 害 该用双指针的 用暴力法就是不行...

class Solution:
    def maxArea(self, height) -> int:
        if len(height) >= 2:
            left = 0
            right = len(height) - 1
            kepp_area = 0
            while left < right:
                kepp_area = self.calc_area(kepp_area, min(height[left], height[right]), right - left)
                if height[left] <= height[right]:
                    left += 1
                else:
                    right -= 1
            return kepp_area
        
        else:
            return 0
    
    def calc_area(self, kepp_area, l, w):
        return max(kepp_area, l * w)